public class test {
//    递归求解汉诺塔问题
    public static void move(char pos1,char pos2){
        System.out.print(pos1+"->"+pos2+" ");
    }

    /**
     *
     * @param n
     * @param pos1 起始位置
     * @param pos2 中转位置
     * @param pos3 目标位置
     */
    public static void hanoi(int n,char pos1,char pos2,char pos3){
        if(n==1){
            move(pos1,pos3);
            return;
        }
        hanoi(n-1,pos1,pos3,pos2);
        move(pos1,pos3);
        hanoi(n-1,pos2,pos1,pos3);
    }
    public static void main(String[] args) {
        hanoi(3,'A','B','C');
    }
//    递归求斐波那契数列的第 N 项
    public static int fib(int n){
        if (n==1||n==2){
            return 1;
        }
        return fib(n-1)+fib(n-2);
    }
    public static void main5(String[] args) {
        System.out.println(fib(8));
    }
//    写一个递归方法，输入一个非负整数，返回组成它的数字之和
    public static double and(int n){
        if (n==1){
            return 1;
        }
        return n%10+and(n/10);
    }
    public static void main4(String[] args) {
        int n=123;
        System.out.println(and(n));
    }
//    按顺序打印一个数字的每一位(例如 1234 打印出 1 2 3 4)    （递归）
    public static void print(int n){
        if (n<=9){
            System.out.println(n);
            return;
        }
        print(n/10);
        System.out.println(n%10);

    }

    public static void main3(String[] args) {
        int n=1234;
        print(n);
    }


//    递归求 1 + 2 + 3 + ... + 10
    public static int sum(int n){
        if (n==1){
            return 1;
        }
        return n+sum(n-1);
    }

    public static void main2(String[] args) {
        System.out.println(sum(10));
    }


//    递归求 N 的阶乘
    public static int fac(int n){
        if (n==1){
            return 1;
        }
        return n*fac(n-1);
    }
    public static void main1(String[] args) {
        System.out.println(fac(5));
    }
}
